package com.buaa.ImageCut;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button selectImageBtn;
    private Button cutImageBtn;
    private ImageView imageView;
    // 声明两个静态的整型变量，主要是用于意图的返回的标志
    private static final int IMAGE_SELECT = 1;// 选择图片
    private static final int IMAGE_CUT = 2;// 裁剪图片

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        selectImageBtn = (Button) this.findViewById(R.id.selectImageBtn);
        cutImageBtn = (Button) this.findViewById(R.id.cutImageBtn);
        imageView = (ImageView) this.findViewById(R.id.imageview);
        selectImageBtn.setOnClickListener(this);
        cutImageBtn.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            // 处理图片按照手机的屏幕大小显示
            if (requestCode == IMAGE_SELECT) {
                Uri uri = data.getData();// 获得图片的路径
                int dw = getWindowManager().getDefaultDisplay().getWidth();// 获得屏幕的宽度
                int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;
                try {
                    // 实现对图片的裁剪的类,是一个匿名内部类
                    BitmapFactory.Options factory = new BitmapFactory.Options();
                    factory.inJustDecodeBounds = true;// 如果设置为true，允许查询图片不是按照像素分配给内存
                    Bitmap bmp;
                    // 对图片的宽度和高度对应手机的屏幕进行匹配

                    int hRatio = (int) Math
                            .ceil(factory.outHeight / (float) dh);
                    // 如果大于1 表示图片的高度大于手机屏幕的高度
                    int wRatio = (int) Math.ceil(factory.outWidth / (float) dw);
                    // 如果大于1 表示图片的宽度大于手机屏幕的宽度
                    // 缩放到1/radio的尺寸和1/radio^2像素
                    if (hRatio > 1 || wRatio > 1) {
                        if (hRatio > wRatio) {
                            factory.inSampleSize = hRatio;
                        } else {
                            factory.inSampleSize = wRatio;
                        }
                    }
                    // 对
                    factory.inJustDecodeBounds = false;
                    // 使用BitmapFactory对图片进行适屏的操作，
                    bmp = BitmapFactory.decodeStream(getContentResolver()
                            .openInputStream(uri), null, factory);
                    imageView.setImageBitmap(bmp);
                } catch (Exception e) {
                    // TODO: handle exception
                }
                // 表示裁剪图片
            } else if (requestCode == IMAGE_CUT) {
                Bitmap bitmap = data.getParcelableExtra("data");
                imageView.setImageBitmap(bitmap);
            }
        }
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            case R.id.selectImageBtn:
                // 如何提取手机的图片的，并且进行选择图片的功能
                Intent intent = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 打开手机的图片库
                startActivityForResult(intent, IMAGE_SELECT);
                break;

            case R.id.cutImageBtn:
                Intent intent2 = getImageClipIntent();
                startActivityForResult(intent2, IMAGE_CUT);
                break;
        }
    }

    private Intent getImageClipIntent() {
        // TODO Auto-generated method stub
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
        // 实现对图片的裁剪，必须要设置图片的属性和大小
        intent.setType("image/*");// 获取任意的图片类型
        intent.putExtra("crop", "true");// 滑动选中图片区域
        intent.putExtra("aspectX", 1);// 表示剪切框的比例1:1的效果
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 80);// 指定输出图片的大小
        intent.putExtra("outputY", 80);
        intent.putExtra("return-data", true);
        return intent;
    }
}
